package hbt.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import Enum.EEstadoOP;
import Enum.EEstadoRemito;

import hbt.HibernateUtil;
import negocio.OrdenPedido;
import negocio.Remito;

public class RemitoDAO extends HibernateDao<Remito> {

	protected static HibernateDao instancia = null;

	public static RemitoDAO getInstancia() {
		if (instancia == null) {
			instancia = new RemitoDAO();
			sf = HibernateUtil.getSessionFactory();
		}
		return (RemitoDAO) instancia;
	}

	public void registrarRemito(Remito r) throws Exception {
		try {
			Session session = sf.openSession();
			session.beginTransaction();
			r.getOrdenPedido().setEstado(EEstadoOP.realizado);
			session.persist(r);
			session.update(r.getOrdenPedido());
			session.flush();
			session.getTransaction().commit();
			session.close();
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}

	public List<Remito> findRemitosPendientesByODV(int odv) {
		Session session = sf.openSession();
		String hql = "select distinct remito from " + Remito.class.getName() + " remito join remito.ordenPedido op ";
		hql += " where remito.estado = :estado AND op.odv.nroSucursal =:odv ";

		Query query = session.createQuery(hql);

		query.setParameter("estado", EEstadoRemito.pendiente);
		query.setParameter("odv", odv);
		List<Remito>  remitos= query.list();
		session.close();
		return remitos;
	}


}
